Modelo de análise preditiva de preços de venda de imóveis residenciais

Algoritmo de análise de regressão

Published

02/06/2024

1. Apresentação do projeto

O Airbnb oferece a muitos viajantes um lugar excelente, fácil e conveniente para ficar durante suas viagens. Da mesma forma, também tem dado a muitas pessoas a oportunidade de obter receitas adicionais, listando as suas residências para hospedagem de viajantes. No entanto, com tantos anúncios disponíveis com preços variados, como pode um aspirante a anfitrião saber em que tipo de imóvel investir se o seu principal objetivo é listá-lo no Airbnb e obter receitas de aluguel? Além disso, se um viajante deseja encontrar o anúncio mais barato disponível, mas com certas características que prefere, como “estacionamento gratuito” etc, como ele sabe quais aspectos considerar para encontrar um anúncio adequado? Existem muitos fatores que influenciam o preço de uma listagem de opções para o viajante. Assim, este projeto se propõe a identificar os fatores mais importantes que afetam o preço de aluguel diário de residências no AirBnb e, além disso, as características que são comuns entre as listagens mais caras de residências para alugar. Isso permitirá que um aspirante a anfitrião do Airbnb garanta que seu anúncio esteja provido com esses atributos importantes para que ele possa cobrar um preço mais alto sem perder clientes. Além disso, o viajante também conhecerá os fatores a serem considerados para obter o menor preço possível e ao mesmo tempo garantir certas características de sua preferência. Para tanto, será elaborado um modelo de análise de regressão linear utilizando as seguintes variáveis explicativas:.

  • host_is_superhost, ou seja, se o proprietário do imóvel é classificado como super anfitrião ou não;
  • host_identity_verified, ou seja, se o proprietário do imóvel tem a identidade verificada;
  • room_type, ou seja, o tipo de acomodação (imóvel inteiro, quarto inteiro, quarto privativo etc);
  • accommodates, ou seja, quantas pessoas o imóvel acomoda;
  • bathrooms, ou seja, a quantidade de banheiros do imóvel; e
  • bedrooms, ou seja, a quantidade de quartos do imóvel.

2. Identificação e coleta das bases de dados

As bases de dados para este projeto foram obtidos do Kaggle. Como o projeto faz parte da disciplina Análise Preditiva, usamos o conjunto de dados do Airbnb para Seattle e analisamos as listagens em Seattle. As bases de dados podem ser obtidas no endereço https://www.kaggle.com/datasets/airbnb/seattle?select=listings.csv.

[1] 3818   92
spc_tbl_ [3.818 × 92] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
 $ id                              : num [1:3818] 241032 953595 3308979 7421966 278830 ...
 $ listing_url                     : chr [1:3818] "https://www.airbnb.com/rooms/241032" "https://www.airbnb.com/rooms/953595" "https://www.airbnb.com/rooms/3308979" "https://www.airbnb.com/rooms/7421966" ...
 $ scrape_id                       : num [1:3818] 20160104002432 20160104002432 20160104002432 20160104002432 20160104002432 ...
 $ last_scraped                    : Date[1:3818], format: "2016-01-04" "2016-01-04" ...
 $ name                            : chr [1:3818] "Stylish Queen Anne Apartment" "Bright & Airy Queen Anne Apartment" "New Modern House-Amazing water view" "Queen Anne Chateau" ...
 $ summary                         : chr [1:3818] NA "Chemically sensitive? We've removed the irritants triggering allergy or asthma attacks, like carpeting, forced "| __truncated__ "New modern house built in 2013.  Spectacular sunset/water views and light, rooftop deck and lounge area, hot tu"| __truncated__ "A charming apartment that sits atop Queen Anne hill, northwest facing bay windows with warm afternoon light set"| __truncated__ ...
 $ space                           : chr [1:3818] "Make your self at home in this charming one-bedroom apartment, centrally-located on the west side of Queen Anne"| __truncated__ "Beautiful, hypoallergenic apartment in an extremely safe, quiet and pedestrian-friendly section of Queen Anne. "| __truncated__ "Our house is modern, light and fresh with a warm simple palette accented with barnwood, steel and concrete.  Op"| __truncated__ NA ...
 $ description                     : chr [1:3818] "Make your self at home in this charming one-bedroom apartment, centrally-located on the west side of Queen Anne"| __truncated__ "Chemically sensitive? We've removed the irritants triggering allergy or asthma attacks, like carpeting, forced "| __truncated__ "New modern house built in 2013.  Spectacular sunset/water views and light, rooftop deck and lounge area, hot tu"| __truncated__ "A charming apartment that sits atop Queen Anne hill, northwest facing bay windows with warm afternoon light set"| __truncated__ ...
 $ experiences_offered             : chr [1:3818] "none" "none" "none" "none" ...
 $ neighborhood_overview           : chr [1:3818] NA "Queen Anne is a wonderful, truly functional village.  You can walk everywhere... for coffee, for groceries, for"| __truncated__ "Upper Queen Anne is a charming neighborhood full of a mix of beautifully maintained, turn-of-the-century crafts"| __truncated__ NA ...
 $ notes                           : chr [1:3818] NA "What's up with the free pillows?  Our home was renovated and restored with health & safety in mind, especially "| __truncated__ "Our house is located just 5 short blocks to Top Pot Doughnuts, Tribunali pizza, Caffe Fiore, Trader Joes and Mo"| __truncated__ NA ...
 $ transit                         : chr [1:3818] NA "Convenient bus stops are just down the block, if you're headed downtown or further afield to explore.  Zip cars"| __truncated__ "A bus stop is just 2 blocks away.   Easy bus access to all the sites: Lower Queen Anne, Seattle Center, The Spa"| __truncated__ NA ...
 $ thumbnail_url                   : chr [1:3818] NA "https://a0.muscache.com/ac/pictures/14409893/f8e3ed8d_original.jpg?interpolation=lanczos-none&size=small&output"| __truncated__ NA NA ...
 $ medium_url                      : chr [1:3818] NA "https://a0.muscache.com/im/pictures/14409893/f8e3ed8d_original.jpg?aki_policy=medium" NA NA ...
 $ picture_url                     : chr [1:3818] "https://a1.muscache.com/ac/pictures/67560560/cfe47d69_original.jpg?interpolation=lanczos-none&size=large_cover&"| __truncated__ "https://a0.muscache.com/ac/pictures/14409893/f8e3ed8d_original.jpg?interpolation=lanczos-none&size=large_cover&"| __truncated__ "https://a2.muscache.com/ac/pictures/b4324e0f-a41b-4614-85a5-0e58c1983b99.jpg?interpolation=lanczos-none&size=la"| __truncated__ "https://a0.muscache.com/ac/pictures/94146944/6302c803_original.jpg?interpolation=lanczos-none&size=large_cover&"| __truncated__ ...
 $ xl_picture_url                  : chr [1:3818] NA "https://a0.muscache.com/ac/pictures/14409893/f8e3ed8d_original.jpg?interpolation=lanczos-none&size=x_large_cove"| __truncated__ NA NA ...
 $ host_id                         : num [1:3818] 956883 5177328 16708587 9851441 1452570 ...
 $ host_url                        : chr [1:3818] "https://www.airbnb.com/users/show/956883" "https://www.airbnb.com/users/show/5177328" "https://www.airbnb.com/users/show/16708587" "https://www.airbnb.com/users/show/9851441" ...
 $ host_name                       : chr [1:3818] "Maija" "Andrea" "Jill" "Emily" ...
 $ host_since                      : Date[1:3818], format: "2011-08-11" "2013-02-21" ...
 $ host_location                   : chr [1:3818] "Seattle, Washington, United States" "Seattle, Washington, United States" "Seattle, Washington, United States" "Seattle, Washington, United States" ...
 $ host_about                      : chr [1:3818] "I am an artist, interior designer, and run a small landscape business. My life revolves around beauty wherever "| __truncated__ "Living east coast/left coast/overseas.  Time is short & it's a big world." "i love living in Seattle.  i grew up in the mid-west but the Pacific North West has always felt like home.  i a"| __truncated__ NA ...
 $ host_response_time              : chr [1:3818] "within a few hours" "within an hour" "within a few hours" "N/A" ...
 $ host_response_rate              : chr [1:3818] "96%" "98%" "67%" "N/A" ...
 $ host_acceptance_rate            : chr [1:3818] "100%" "100%" "100%" "N/A" ...
 $ host_is_superhost               : logi [1:3818] FALSE TRUE FALSE FALSE FALSE FALSE ...
 $ host_thumbnail_url              : chr [1:3818] "https://a0.muscache.com/ac/users/956883/profile_pic/1318103129/original.jpg?interpolation=lanczos-none&crop=w:w"| __truncated__ "https://a0.muscache.com/ac/users/5177328/profile_pic/1361540767/original.jpg?interpolation=lanczos-none&crop=w:"| __truncated__ "https://a1.muscache.com/ac/users/16708587/profile_pic/1428941043/original.jpg?interpolation=lanczos-none&crop=w"| __truncated__ "https://a2.muscache.com/ac/users/9851441/profile_pic/1414045273/original.jpg?interpolation=lanczos-none&crop=w:"| __truncated__ ...
 $ host_picture_url                : chr [1:3818] "https://a0.muscache.com/ac/users/956883/profile_pic/1318103129/original.jpg?interpolation=lanczos-none&crop=w:w"| __truncated__ "https://a0.muscache.com/ac/users/5177328/profile_pic/1361540767/original.jpg?interpolation=lanczos-none&crop=w:"| __truncated__ "https://a1.muscache.com/ac/users/16708587/profile_pic/1428941043/original.jpg?interpolation=lanczos-none&crop=w"| __truncated__ "https://a2.muscache.com/ac/users/9851441/profile_pic/1414045273/original.jpg?interpolation=lanczos-none&crop=w:"| __truncated__ ...
 $ host_neighbourhood              : chr [1:3818] "Queen Anne" "Queen Anne" "Queen Anne" "Queen Anne" ...
 $ host_listings_count             : num [1:3818] 3 6 2 1 2 1 1 5 1 6 ...
 $ host_total_listings_count       : num [1:3818] 3 6 2 1 2 1 1 5 1 6 ...
 $ host_verifications              : chr [1:3818] "['email', 'phone', 'reviews', 'kba']" "['email', 'phone', 'facebook', 'linkedin', 'reviews', 'jumio']" "['email', 'phone', 'google', 'reviews', 'jumio']" "['email', 'phone', 'facebook', 'reviews', 'jumio']" ...
 $ host_has_profile_pic            : logi [1:3818] TRUE TRUE TRUE TRUE TRUE TRUE ...
 $ host_identity_verified          : logi [1:3818] TRUE TRUE TRUE TRUE TRUE TRUE ...
 $ street                          : chr [1:3818] "Gilman Dr W, Seattle, WA 98119, United States" "7th Avenue West, Seattle, WA 98119, United States" "West Lee Street, Seattle, WA 98119, United States" "8th Avenue West, Seattle, WA 98119, United States" ...
 $ neighbourhood                   : chr [1:3818] "Queen Anne" "Queen Anne" "Queen Anne" "Queen Anne" ...
 $ neighbourhood_cleansed          : chr [1:3818] "West Queen Anne" "West Queen Anne" "West Queen Anne" "West Queen Anne" ...
 $ neighbourhood_group_cleansed    : chr [1:3818] "Queen Anne" "Queen Anne" "Queen Anne" "Queen Anne" ...
 $ city                            : chr [1:3818] "Seattle" "Seattle" "Seattle" "Seattle" ...
 $ state                           : chr [1:3818] "WA" "WA" "WA" "WA" ...
 $ zipcode                         : num [1:3818] 98119 98119 98119 98119 98119 ...
 $ market                          : chr [1:3818] "Seattle" "Seattle" "Seattle" "Seattle" ...
 $ smart_location                  : chr [1:3818] "Seattle, WA" "Seattle, WA" "Seattle, WA" "Seattle, WA" ...
 $ country_code                    : chr [1:3818] "US" "US" "US" "US" ...
 $ country                         : chr [1:3818] "United States" "United States" "United States" "United States" ...
 $ latitude                        : num [1:3818] 47,6 47,6 47,6 47,6 47,6 ...
 $ longitude                       : num [1:3818] -122 -122 -122 -122 -122 ...
 $ is_location_exact               : logi [1:3818] TRUE TRUE TRUE TRUE TRUE TRUE ...
 $ property_type                   : chr [1:3818] "Apartment" "Apartment" "House" "Apartment" ...
 $ room_type                       : chr [1:3818] "Entire home/apt" "Entire home/apt" "Entire home/apt" "Entire home/apt" ...
 $ accommodates                    : num [1:3818] 4 4 11 3 6 2 2 2 2 4 ...
 $ bathrooms                       : num [1:3818] 1 1 4,5 1 2 1 1 1 1 1 ...
 $ bedrooms                        : num [1:3818] 1 1 5 0 3 1 1 1 1 1 ...
 $ beds                            : num [1:3818] 1 1 7 2 3 1 1 1 1 1 ...
 $ bed_type                        : chr [1:3818] "Real Bed" "Real Bed" "Real Bed" "Real Bed" ...
 $ amenities                       : chr [1:3818] "{TV,\"Cable TV\",Internet,\"Wireless Internet\",\"Air Conditioning\",Kitchen,Heating,\"Family/Kid Friendly\",Washer,Dryer}" "{TV,Internet,\"Wireless Internet\",Kitchen,\"Free Parking on Premises\",\"Buzzer/Wireless Intercom\",Heating,\""| __truncated__ "{TV,\"Cable TV\",Internet,\"Wireless Internet\",\"Air Conditioning\",Kitchen,\"Free Parking on Premises\",\"Pet"| __truncated__ "{Internet,\"Wireless Internet\",Kitchen,\"Indoor Fireplace\",Heating,\"Family/Kid Friendly\",Washer,Dryer,\"Smo"| __truncated__ ...
 $ square_feet                     : num [1:3818] NA NA NA NA NA NA NA NA NA NA ...
 $ price                           : chr [1:3818] "$85.00" "$150.00" "$975.00" "$100.00" ...
 $ weekly_price                    : chr [1:3818] NA "$1,000.00" NA "$650.00" ...
 $ monthly_price                   : chr [1:3818] NA "$3,000.00" NA "$2,300.00" ...
 $ security_deposit                : chr [1:3818] NA "$100.00" "$1,000.00" NA ...
 $ cleaning_fee                    : chr [1:3818] NA "$40.00" "$300.00" NA ...
 $ guests_included                 : num [1:3818] 2 1 10 1 6 1 1 1 1 1 ...
 $ extra_people                    : chr [1:3818] "$5.00" "$0.00" "$25.00" "$0.00" ...
 $ minimum_nights                  : num [1:3818] 1 2 4 1 1 1 3 2 3 2 ...
 $ maximum_nights                  : num [1:3818] 365 90 30 1125 1125 ...
 $ calendar_updated                : chr [1:3818] "4 weeks ago" "today" "5 weeks ago" "6 months ago" ...
 $ has_availability                : logi [1:3818] TRUE TRUE TRUE TRUE TRUE TRUE ...
 $ availability_30                 : num [1:3818] 14 13 1 0 30 0 20 22 6 6 ...
 $ availability_60                 : num [1:3818] 41 13 6 0 60 0 49 42 36 19 ...
 $ availability_90                 : num [1:3818] 71 16 17 0 90 27 71 42 66 49 ...
 $ availability_365                : num [1:3818] 346 291 220 143 365 302 346 100 341 324 ...
 $ calendar_last_scraped           : Date[1:3818], format: "2016-01-04" "2016-01-04" ...
 $ number_of_reviews               : num [1:3818] 207 43 20 0 38 17 58 173 8 32 ...
 $ first_review                    : Date[1:3818], format: "2011-11-01" "2013-08-19" ...
 $ last_review                     : Date[1:3818], format: "2016-01-02" "2015-12-29" ...
 $ review_scores_rating            : num [1:3818] 95 96 97 NA 92 95 99 97 97 97 ...
 $ review_scores_accuracy          : num [1:3818] 10 10 10 NA 9 10 10 10 10 10 ...
 $ review_scores_cleanliness       : num [1:3818] 10 10 10 NA 9 10 10 10 9 10 ...
 $ review_scores_checkin           : num [1:3818] 10 10 10 NA 10 10 10 10 10 10 ...
 $ review_scores_communication     : num [1:3818] 10 10 10 NA 10 10 10 10 9 10 ...
 $ review_scores_location          : num [1:3818] 9 10 10 NA 9 10 10 9 10 10 ...
 $ review_scores_value             : num [1:3818] 10 10 10 NA 9 10 10 10 10 9 ...
 $ requires_license                : logi [1:3818] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ license                         : logi [1:3818] NA NA NA NA NA NA ...
 $ jurisdiction_names              : chr [1:3818] "WASHINGTON" "WASHINGTON" "WASHINGTON" "WASHINGTON" ...
 $ instant_bookable                : logi [1:3818] FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ cancellation_policy             : chr [1:3818] "moderate" "strict" "strict" "flexible" ...
 $ require_guest_profile_picture   : logi [1:3818] FALSE TRUE FALSE FALSE FALSE FALSE ...
 $ require_guest_phone_verification: logi [1:3818] FALSE TRUE FALSE FALSE FALSE FALSE ...
 $ calculated_host_listings_count  : num [1:3818] 2 6 2 1 1 1 1 5 1 6 ...
 $ reviews_per_month               : num [1:3818] 4,07 1,48 1,15 NA 0,89 2,45 2,46 4,73 1,22 1,55 ...
 - attr(*, "spec")=
  .. cols(
  ..   id = col_double(),
  ..   listing_url = col_character(),
  ..   scrape_id = col_double(),
  ..   last_scraped = col_date(format = ""),
  ..   name = col_character(),
  ..   summary = col_character(),
  ..   space = col_character(),
  ..   description = col_character(),
  ..   experiences_offered = col_character(),
  ..   neighborhood_overview = col_character(),
  ..   notes = col_character(),
  ..   transit = col_character(),
  ..   thumbnail_url = col_character(),
  ..   medium_url = col_character(),
  ..   picture_url = col_character(),
  ..   xl_picture_url = col_character(),
  ..   host_id = col_double(),
  ..   host_url = col_character(),
  ..   host_name = col_character(),
  ..   host_since = col_date(format = ""),
  ..   host_location = col_character(),
  ..   host_about = col_character(),
  ..   host_response_time = col_character(),
  ..   host_response_rate = col_character(),
  ..   host_acceptance_rate = col_character(),
  ..   host_is_superhost = col_logical(),
  ..   host_thumbnail_url = col_character(),
  ..   host_picture_url = col_character(),
  ..   host_neighbourhood = col_character(),
  ..   host_listings_count = col_double(),
  ..   host_total_listings_count = col_double(),
  ..   host_verifications = col_character(),
  ..   host_has_profile_pic = col_logical(),
  ..   host_identity_verified = col_logical(),
  ..   street = col_character(),
  ..   neighbourhood = col_character(),
  ..   neighbourhood_cleansed = col_character(),
  ..   neighbourhood_group_cleansed = col_character(),
  ..   city = col_character(),
  ..   state = col_character(),
  ..   zipcode = col_double(),
  ..   market = col_character(),
  ..   smart_location = col_character(),
  ..   country_code = col_character(),
  ..   country = col_character(),
  ..   latitude = col_double(),
  ..   longitude = col_double(),
  ..   is_location_exact = col_logical(),
  ..   property_type = col_character(),
  ..   room_type = col_character(),
  ..   accommodates = col_double(),
  ..   bathrooms = col_double(),
  ..   bedrooms = col_double(),
  ..   beds = col_double(),
  ..   bed_type = col_character(),
  ..   amenities = col_character(),
  ..   square_feet = col_double(),
  ..   price = col_character(),
  ..   weekly_price = col_character(),
  ..   monthly_price = col_character(),
  ..   security_deposit = col_character(),
  ..   cleaning_fee = col_character(),
  ..   guests_included = col_double(),
  ..   extra_people = col_character(),
  ..   minimum_nights = col_double(),
  ..   maximum_nights = col_double(),
  ..   calendar_updated = col_character(),
  ..   has_availability = col_logical(),
  ..   availability_30 = col_double(),
  ..   availability_60 = col_double(),
  ..   availability_90 = col_double(),
  ..   availability_365 = col_double(),
  ..   calendar_last_scraped = col_date(format = ""),
  ..   number_of_reviews = col_double(),
  ..   first_review = col_date(format = ""),
  ..   last_review = col_date(format = ""),
  ..   review_scores_rating = col_double(),
  ..   review_scores_accuracy = col_double(),
  ..   review_scores_cleanliness = col_double(),
  ..   review_scores_checkin = col_double(),
  ..   review_scores_communication = col_double(),
  ..   review_scores_location = col_double(),
  ..   review_scores_value = col_double(),
  ..   requires_license = col_logical(),
  ..   license = col_logical(),
  ..   jurisdiction_names = col_character(),
  ..   instant_bookable = col_logical(),
  ..   cancellation_policy = col_character(),
  ..   require_guest_profile_picture = col_logical(),
  ..   require_guest_phone_verification = col_logical(),
  ..   calculated_host_listings_count = col_double(),
  ..   reviews_per_month = col_double()
  .. )
 - attr(*, "problems")=<externalptr> 

3. Preparação e limpeza da base de dados

Como o conjunto de dados do Kaggle não era muito adequado para este projeto de análise preditiva, foi necessário alterar o formato de alguns dados. Também foi necessário fazer uma preparação de dados separada para análise exploratória e aprendizado de máquina. As principais transformações nos dados foram:

  • Converter todas as colunas de preço das listagens de strings em floats e também remover o sinal ‘$’;
  • Alterar os valores de NaN para o número inteiro 0;
  • Remover da base de dados as colunas com as variáveis que não são de interesse da análise, como listagem_url, scrape_id etc;
  • Limpar os dados textuais em um formato que seja adequado para a análise;
  • Codificar as variáveis categóricas para que possam ser ajustadas posteriormente nos modelos de regressão;
  • Separar os dados em variáveis preditoras e de resposta;
  • Separar os dados em conjuntos de treinamento e teste (conjuntos de treinamento: conjuntos de testes = 80%:20%).

4. Análise exploratória da base de dados

Na análise exploratória, são descritos os dados da variável de resposta e dos preditores em termos de estatísticas resumidas importantes, como média, moda, mediana, desvio padrão, intervalo, assimetria e curtose. São apresentados, ainda, os gráficos de histograma e box-plot também para cada variável.

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
     20      75     100     128     150    1000 
   Mode   FALSE    TRUE    NA's 
logical    3038     778       2 
   Mode   FALSE    TRUE    NA's 
logical     819    2997       2 
   Length     Class      Mode 
     3818 character character 
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
   0,00    1,00    1,00    1,31    2,00    7,00       6 
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
   0,00    1,00    1,00    1,26    1,00    8,00      16 
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1,00    2,00    3,00    3,35    4,00   16,00 
   Mode   FALSE    TRUE 
logical    3040     778 
   Mode   FALSE    TRUE 
logical     821    2997 
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   0,00    1,00    1,00    1,31    2,00    7,00 
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   0,00    1,00    1,00    1,26    1,00    8,00 

De acordo com a análise do resumo das principais estatísticas descritivas da base de dados, verifica-se que as variáveis binárias host_is_superhost e host_identity_verified possuem, cada uma, duas observações NAs. Assim, aplica-se a função de reposição dos valores dessas observações onde se imputou o valor lógico FALSE. Da mesma forma, observou-se que que as variáveis numéricas bedrooms e bathrooms também apresentaram valores NAs, os quais foram repostos pelos respectivos valores de medianas por meio da função de imputação de valores numéricos. A seguir, são apresentados os gráficos que expressam as distribuições de frequência dos dados.

listing$price_num 
       n  missing distinct     Info     Mean      Gmd      .05      .10 
    3818        0      273        1      128     83,3       45       55 
     .25      .50      .75      .90      .95 
      75      100      150      225      299 

lowest :   20   22   25   26   27, highest:  899  950  975  999 1000
listing$host_is_superhost 
       n  missing distinct 
    3818        0        2 
                      
Value      FALSE  TRUE
Frequency   3040   778
Proportion 0,796 0,204
listing$host_identity_verified 
       n  missing distinct 
    3818        0        2 
                      
Value      FALSE  TRUE
Frequency    821  2997
Proportion 0,215 0,785
listing$accommodates 
       n  missing distinct     Info     Mean      Gmd      .05      .10 
    3818        0       15    0,912    3,349    1,985        1        2 
     .25      .50      .75      .90      .95 
       2        3        4        6        7 
                                                                            
Value          1     2     3     4     5     6     7     8     9    10    11
Frequency    256  1627   398   785   184   332    52   119    13    25     3
Proportion 0,067 0,426 0,104 0,206 0,048 0,087 0,014 0,031 0,003 0,007 0,001
                                  
Value         12    14    15    16
Frequency     15     3     2     4
Proportion 0,004 0,001 0,001 0,001

For the frequency table, variable is rounded to the nearest 0
listing$bedrooms 
       n  missing distinct     Info     Mean      Gmd 
    3818        0        8    0,738    1,307   0,8202 
                                                          
Value          0     1     2     3     4     5     6     7
Frequency    372  2423   640   283    69    24     6     1
Proportion 0,097 0,635 0,168 0,074 0,018 0,006 0,002 0,000

For the frequency table, variable is rounded to the nearest 0
listing$bathrooms 
       n  missing distinct     Info     Mean      Gmd      .05      .10 
    3818        0       12    0,561    1,258   0,4544      1,0      1,0 
     .25      .50      .75      .90      .95 
     1,0      1,0      1,0      2,0      2,5 
                                                                            
Value          0   0,5     1   1,5     2   2,5     3   3,5     4   4,5     5
Frequency      8    31  2898   248   373   124    64    57     8     3     2
Proportion 0,002 0,008 0,759 0,065 0,098 0,032 0,017 0,015 0,002 0,001 0,001
                
Value          8
Frequency      2
Proportion 0,001

For the frequency table, variable is rounded to the nearest 0

De acordo com a estatísticas acima, o preço de aluguel do imóvel do Airbnb tende a ser mais alto quando o proprietário não é um superhost em comparação a quando o proprietário é um superhost. O preço tende a ser um pouco mais alto quando a identidade do host é verificada em comparação a quando não é verificada. Em termos de tipo de quarto, o preço tende a ser muito mais elevado para casa/apto inteiro em relação ao preço do quarto privado, e principalmente ao preço do quarto partilhado. Para a variável capacidade de acomodação, não existe um padrão claro entre a quantidade de pessoas acomodadas no imóvel e o preço do aluguel. Pelo gráfico, parece que os imóveis que acomodam 4 pessoas têm o preço mais alto, seguidos daqueles que acomodam 6 e 2 pessoas. Para a variável banheiros, os anúncios com 1 banheiro têm o preço mais alto, seguidos daqueles com 2 banheiros. Não existe um padrão para o restante dos imóveis com outras quantidades de banheiros. Para a variável quartos (dormitórios), os imóveis de 1 e 2 dormitórios apresentam o preço mais elevado, e o preço tende a diminuir à medida que aumenta o número de dormitórios.

5. Especificação do modelo

A regressão linear é um algoritmo de aprendizado de máquina baseado no aprendizado supervisionado. Ele executa a tarefa de regressão para prever o valor de uma variável dependente (neste caso, o preço do aluguel do imóvel - preco_num) com base em determinadas variáveis independentes (neste caso, as variáveis preditoras bedrooms, bathrooms, accommodates, host_is_superhost, host_identity_verified e room_type). Em seguida, tenta-se encontrar uma relação linear entre as variáveis preditoras (variáveis independentes) e a variável predita (variável dependente). Aqui, treinamos o modelo para seguir a seguinte fórmula:

\(preco\,num = \beta _{0}+ \beta_{1}\ast host\,is\,superhost+\beta_{2}\ast host\,identity\,verified+\beta_{3}\ast room\,type+\beta_{4}\ast bedroom+\beta_{5}\ast bathroom+\beta_{6}\ast accommodates+\varepsilon\)

onde:

  • preco_num = preço do aluguel do imóvel
  • host_is_superhost, ou seja, se o proprietário do imóvel é classificado como super anfitrião ou não;
  • host_identity_verified, ou seja, se o proprietário do imóvel tem a identidade verificada;
  • room_type, ou seja, o tipo de acomodação (imóvel inteiro, quarto inteiro, quarto privativo etc);
  • accommodates, ou seja, quantas pessoas o imóvel acomoda;
  • bathrooms, ou seja, a quantidade de banheiros do imóvel; e
  • bedrooms, ou seja, a quantidade de quartos do imóvel.

Atenção!

Como as variáveis accommodates e bathrooms não apresentaram uma distribuição normal, aplicou-se a transformação logarítmica para linearizar as relações entre variáveis, tornando o modelo de regressão linear simples apropriado para os dados transformados

A seguir, são apresentados o resultado do modelo de regressão final usado e as evidências de que o modelo se ajusta razoavelmente bem às suposições. A saída do modelo deve incluir uma tabela com coeficientes, os erros-padrão e valores de p ou intervalos de confiança.

Resumo do modelo de regressão
term estimate std.error statistic p.value
(Intercept) 4,21656847 0,0220601 191,140355 0,000000000
host_is_superhostTRUE 0,05036027 0,0143880 3,500156 0,000470314
host_identity_verifiedTRUE 0,00595025 0,0141101 0,421703 0,673265594
log(accommodates) 0,22106388 0,0174897 12,639664 0,000000000
bathrooms 0,13220781 0,0123318 10,720900 0,000000000
bedrooms 0,16132503 0,0101460 15,900433 0,000000000
room_typePrivate room -0,45503476 0,0151033 -30,128143 0,000000000
room_typeShared room -0,83719673 0,0361989 -23,127655 0,000000000

As variáveis host_is_superhost e host_identity_verified, room_type não são elegíveis para verificação de suposições porque são variáveis categóricas. Portanto, iremos excluí-las aqui para este propósito.

Olhando para os gráficos das variáveis do modelo em relação aos resíduos, a maioria dos pontos parece estar igualmente distribuída acima e abaixo da linha de resíduos 0,0 e são distribuídos aleatoriamente, de modo que nenhum padrão claro é identificado e a suposição de linearidade é válida. A seguir, verifica-se a independência das variáveis e a igualdade de variância.

Observando o gráfico de resíduos versus valores ajustados, a maioria dos pontos parece estar distribuída aleatoriamente e não parece haver um padrão claro. A linha vermelha está muito próxima da linha plana e da linha de resíduos 0,0. Os pontos também parecem estar distribuídos igualmente acima e abaixo da linha de resíduos 0,0. Portanto, as suposições de independência e igualdade de variância são válidas. A seguir, verifica-se o pressuposto da normalidade do modelo.

Observando o gráfico Q-Q normal, a maioria dos pontos no gráfico parece cair na linha de ângulo de 45 graus, com alguns desvios em ambas as extremidades, o que pode ser causado por valores discrepantes no conjunto de dados que precisam de investigações adicionais. Portanto, a suposição de normalidade é válida e concluímos que as principais suposições são plausíveis neste modelo.

6. Interpretação dos resultados do modelo

Somente os relacionamentos relativos às variáveis room_type (Private room), log(accommodates), log(banheiros) e bedrooms serão interpretados, uma vez que apenas esses quatro preditores são significativos no nível 0,05. Para o preditor room_type8, a resposta Casa/apto inteiro é a linha de base aqui. Espera-se que o preço médio de aluguel diminua em 0,329859 unidade em média, ao preço médio para Casa/apto inteiro, enquanto mantém outras variáveis constantes. Para o preditor accommodates, espera-se que o preço médio de aluguel do imóvel aumente em e^(0,328015)-1 = 38,82% para cada incremento unitário adicional em acomoda em média, enquanto mantém outras variáveis constantes. Para a variável bathrooms, espera-se que o preço médio de listagem aumente em e^(0,400984)-1 = 49,33% para cada incremento de unidade adicional em banheiros, em média, enquanto mantém outras variáveis constantes. Para a variável bedrooms, espera-se que o preço médio de listagem aumente em média 0,110732 unidades para cada incremento de unidade adicional em quartos, mantendo outras variáveis constantes.

Existem valores discrepantes (potenciais), pontos de alavancagem ou pontos de influência? A seguir, apresenta-se o gráfico Resíduos x Pontos de alavancagem para verificação de eventuais valores discrepantes ou pontos de influência. Se houver pontos influentes e/ou outliers, estes serão excluídos e o modelo será ajustado. <span class=“emphasized”.

Olhando para o gráfico Resíduos vs Alavancagem, há dois pontos influentes, o ponto 2646 e o ponto 1074, que estão além da marca 1 da distância de Cook. Como ambos os pontos estão além da marca de 0,5 na pontuação de alavancagem, ambos também são pontos de alta influência, bem como possíveis discrepâncias.

# A tibble: 216 × 69
         id last_scraped experiences_offered  host_id host_name host_since
      <dbl> <date>       <chr>                  <dbl> <chr>     <date>    
 1  3308979 2016-01-04   none                16708587 Jill      2014-06-12
 2  7735464 2016-01-04   none                 6170760 Sam       2013-04-30
 3  6291829 2016-01-04   none                32713558 Kary      2015-05-05
 4  8942678 2016-01-04   none                46675077 Susanna   2015-10-16
 5  6362362 2016-01-04   none                33147763 Tracy     2015-05-11
 6  6575380 2016-01-04   none                34392395 Sam       2015-05-27
 7 10310373 2016-01-04   none                53050379 Ana       2016-01-02
 8  4566393 2016-01-04   none                23669617 Irmela    2014-11-12
 9  7011773 2016-01-04   none                23228606 Elin      2014-11-01
10  2467550 2016-01-04   none                  811494 Alexis    2011-07-12
# ℹ 206 more rows
# ℹ 63 more variables: host_location <chr>, host_is_superhost <lgl>,
#   host_neighbourhood <chr>, host_listings_count <dbl>,
#   host_total_listings_count <dbl>, host_has_profile_pic <lgl>,
#   host_identity_verified <lgl>, neighbourhood <chr>,
#   neighbourhood_cleansed <chr>, neighbourhood_group_cleansed <chr>,
#   city <chr>, state <chr>, zipcode <dbl>, market <chr>, …
Resumo do Modelo de Regressão
term estimate std.error statistic p.value
(Intercept) 4,21656847 0,0220601 191,140355 0,000000000
host_is_superhostTRUE 0,05036027 0,0143880 3,500156 0,000470314
host_identity_verifiedTRUE 0,00595025 0,0141101 0,421703 0,673265594
room_typePrivate room -0,45503476 0,0151033 -30,128143 0,000000000
room_typeShared room -0,83719673 0,0361989 -23,127655 0,000000000
log(accommodates) 0,22106388 0,0174897 12,639664 0,000000000
bathrooms 0,13220781 0,0123318 10,720900 0,000000000
bedrooms 0,16132503 0,0101460 15,900433 0,000000000

A seguir, apresenta-se novamente o gráfico da Distância de Cook, agora sem os dois pontos de influência identificados.

A seguir, verifica-se novamente o pressuposto da linearidade do modelo.

Verificando novamente as suposições de independência e normalidade, observa-se que os pontos estão distribuídos aleatoriamente e seguem a linha do ângulo de 45 graus. Portanto, ambas as suposições ainda são válidas.

Em conclusão, após a remoção dos dois pontos influentes, todos os pressupostos continuam a ser válidos e não existem mais pontos influentes ou pontos de alavancagem no modelo, sugerindo que o novo modelo provavelmente se ajustará melhor aos dados. No novo resumo de saída:

  • Para o preditor room_type, espera-se que o preço médio de aluguel diminua em 0,343339 unidade em média, ao preço médio para Casa/apto inteiro (linha de base), enquanto mantém outras variáveis constantes;
  • Para o preditor accommodates, espera-se que o preço médio de aluguel aumente em e^(0,303302)-1 = 35,43% para cada incremento unitário adicional em accommodates em média, enquanto mantém outras variáveis constantes;
  • Para a variável bathrooms, espera-se que o preço médio de aluguel aumente em e^(0,403184)-1 = 49,66% para cada incremento de unidade adicional em banheiros, em média, enquanto mantém outras variáveis constantes;
  • Para a variável bedrooms, espera-se que o preço médio de aluguel aumente em média 0,118474 unidade para cada incremento de unidade adicional em quartos, mantendo outras variáveis constantes.

De todo modo, existem algumas limitações potenciais desta análise, a saber:

  • Embora os dois valores discrepantes tenham sido removidos da análise, o modelo ainda não conseguiu capturar a verdadeira relação entre essas duas variáveis categóricas - host_is_superhost e host_identity_verified - e a variável de resposta - preço de acordo com a saída do modelo de regressão.
  • Para alguns gráficos de resíduos, uma boa quantidade de pontos ainda tende a se agrupar em torno da extremidade inferior (marca 0) dos gráficos e, no gráfico qq normal, ainda existem alguns desvios em ambas as extremidades. Pode haver outros fatores envolvidos, e os erros residuais devidos a outros fatores não medidos precisam ser investigados mais detalhadamente.